package auth

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"scaffold-demo/config"
	"scaffold-demo/utils/jwtutils"
	"scaffold-demo/utils/log"
)

type UserInfo struct { //定义结构体，存储前端传过来的用户名和密码
	Username string `json:"username"`
	Password string `json:"password"`
}

func Login(r *gin.Context) { //登录控制器
	returnData := config.NewReturnData()                //使用config中的构造函数来返回给前端消息
	userinfo := UserInfo{}                              //绑定前端传过来的信息，判断是否绑定成功
	if err := r.ShouldBindJSON(&userinfo); err != nil { //一般绑定是不会失败的，如果失败返回给前端错误信息
		returnData.Status = 401
		returnData.Message = err.Error()
		r.JSON(http.StatusOK, returnData)
		return
	}
	log.Debug(map[string]interface{}{"用户名": userinfo.Username, "密码": userinfo.Password}, "开始验证登录信息") //绑定成功后在Debug打印用户名和密码
	if userinfo.Username == config.Username && userinfo.Password == config.Password {                //如果前端传过来的账号密码和config中存储的默认账号密码一样，就生成token
		ss, err := jwtutils.GenToken(userinfo.Username) //使用前端传过来的用户名作为jwt生成token的secret
		if err != nil {
			log.Error(map[string]interface{}{"用户": userinfo.Username, "错误信息": err.Error()}, "token生成失败")
			returnData.Status = 401
			returnData.Message = "token生成失败"
			r.JSON(http.StatusOK, returnData)
			return
		}
		log.Info(map[string]interface{}{"用户名": userinfo.Username}, "登陆成功")
		data := make(map[string]interface{})
		data["token"] = ss
		returnData.Status = 200
		returnData.Message = "登陆成功"
		returnData.Data = data
		r.JSON(http.StatusOK, returnData)
		return
	} else {
		returnData.Status = 401
		returnData.Message = "登陆失败，用户名或密码错误"
		r.JSON(http.StatusOK, returnData)
		return
	}
}

func Logout(r *gin.Context) { //退出控制器
	returnData := config.NewReturnData() //使用config中的构造函数来返回给前端消息
	returnData.Status = 200
	returnData.Message = "用户退出成功"
	r.JSON(http.StatusOK, returnData)
	log.Debug(nil, "用户退出成功")

}
